﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Negocio.View;
using Negocio.Generico;
using PresentacionWindows.Base;
using Integra.Comun;

namespace PresentacionWindows
{
    public partial class uscAsignaturas : UserControlBase
    {
        #region Propiedades

        bool bEditando = false;
        private AsignaturaDTO objetoEdicion;
        #endregion

        #region Inicializacion

        public uscAsignaturas(PersonaDTO tokenUsuario)
        {
            this.TokenUsuario = tokenUsuario;
            InitializeComponent();
            DSToBinding();
        }

        #endregion

        #region Eventos

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            bEditando = false;
            BloquearControles(true);
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            if (grdAsignaturas.SelectedRows.Count == 1)
            {
                bEditando = true;
                BloquearControles(true);
                objetoEdicion = new AsignaturaDTO();
                //Cargamos lo datos de la asignatura
                RellenaBean();
                txtNombreAsignatura.Text = objetoEdicion.Nombre;
                txtCreditos.Text = objetoEdicion.CreditosAsig.ToString();
                this.cboTitulacion.SelectedValue = objetoEdicion.CoTitulacion;

            }
            else { MessageBox.Show("Seleccione una asignatura"); }
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.grdAsignaturas.Rows.Count > 0)
                {
                    AsignaturaDTO filtro = null;
                    GenericaView vista = GenericaView.GetInstance();
                    foreach (DataGridViewRow dr in grdAsignaturas.SelectedRows)
                    {
                        filtro = null;
                        filtro = new AsignaturaDTO();
                        filtro.CoAsignatura = Int32.Parse(dr.Cells["CODIGOASIGNATURA"].Value.ToString());
                        if (vista.Elimina(filtro))
                        { MessageBox.Show("Se ha eliminado correctamente la asignatura"); }
                    }
                    RecargaGrid();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Se ha producido un error eliminando la asignatura. Excepcion: " + ex.Message);
            }
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                GenericaView obj = GenericaView.GetInstance();
                AsignaturaDTO bean = null;
                if (!bEditando)
                {
                    bean = new AsignaturaDTO();
                    bean.Nombre = this.txtNombreAsignatura.Text;
                    bean.CreditosAsig = Int32.Parse(this.txtCreditos.Text);
                    bean.CoTitulacion = Int32.Parse(this.cboTitulacion.SelectedValue.ToString());
                    bean.CoProfesor = this.TokenUsuario.CoProfesor;

                    if (obj.Inserta(bean))
                    {
                        MessageBox.Show("Se ha insertado correctamente la asignatura");
                    }
                }
                else
                {
                    AsignaturaView objLista = AsignaturaView.GetInstance();
                    AsignaturaDTO condiciones = new AsignaturaDTO();
                    condiciones.CoAsignatura = Int32.Parse(this.grdAsignaturas.SelectedRows[0].ToString());

                    AsignaturaDTO[] listaBean = (AsignaturaDTO[])obj.GetSimple(condiciones);

                    bean = listaBean[0];

                    bean.Nombre = this.txtNombreAsignatura.Text;
                    bean.CreditosAsig = Int32.Parse(this.txtCreditos.Text);
                    bean.CoTitulacion = Int32.Parse(this.cboTitulacion.SelectedValue.ToString());
                    bean.CoProfesor = this.TokenUsuario.CoProfesor;
                    if (obj.Actualiza(bean))
                    {
                        MessageBox.Show("Se ha actualizado correctamente la asignatura");
                    }

                }
                RecargaGrid();
                BloquearControles(false);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
        }


        private void cboTitulacion_SelectedIndexChanged(object sender, EventArgs e)
        {
            RecargaGrid();
        }
        #endregion

        #region Metodos privados

        /// <summary>
        /// Inicializa los datos propios del formulario en función de los eventos asociados.
        /// </summary>
        private void DSToBinding()
        {


            #region Carga de combos

            //Carga de los valores del combo del listado de titularidades
            TitulacionView obj = TitulacionView.GetInstance();
            ControlDatos.CargarCombo(this.cboTitulacion, obj.GetViewTitulaciones(new TitulacionDTO()), "NOMBRE", "CODIGOTITULACION", TipoCargaCombo.Normal);
            this.cboTitulacion.SelectedIndexChanged += new System.EventHandler(this.cboTitulacion_SelectedIndexChanged);

            #endregion

            #region Carga de asignaturas

            AsignaturaDTO filtro = new AsignaturaDTO();
            RecargaGrid(filtro);


            #endregion

        }

        /// <summary>
        /// Metodo que bloquea todos los controles en función del estado en el que nos encontremos
        /// </summary>
        /// <param name="estado">bit de control para el bloqueo</param>
        private void BloquearControles(bool estado)
        {
            this.txtCreditos.Enabled = estado;
            this.txtCreditosAsignatura.Enabled = estado;
            this.txtNombreAsignatura.Enabled = estado;
            cboTitulacion.Enabled = estado;

            if (!bEditando)
            {
                txtCreditosAsignatura.Text = "";
                txtCreditos.Text = "";
                txtNombreAsignatura.Text = "";
            }
        }

        /// <summary>
        /// Función que rellena un bean segun una row seleccionada de un grid
        /// </summary>
        /// <returns>Funcion que devuelve un objeto de transporte de asignatura</returns>
        private void RellenaBean()
        {
            try
            {
                objetoEdicion.CoProfesor = Int32.Parse(grdAsignaturas.SelectedRows[0].Cells["CODIGOPROFESOR"].Value.ToString());
                objetoEdicion.CoTitulacion = Int32.Parse(grdAsignaturas.SelectedRows[0].Cells["CODIGOTITULACION"].Value.ToString());
                objetoEdicion.CoAsignatura = Int32.Parse(grdAsignaturas.SelectedRows[0].Cells["CODIGOASIGNATURA"].Value.ToString());
                objetoEdicion.CreditosAsig = Int32.Parse(grdAsignaturas.SelectedRows[0].Cells["CREDITOSASIG"].Value.ToString());
                objetoEdicion.Nombre = grdAsignaturas.SelectedRows[0].Cells["NOMBRE"].Value.ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }


        private void RecargaGrid()
        {
            //TODO:Debe de recargar todo el listado
            AsignaturaDTO filtro = new AsignaturaDTO();
            filtro.CoTitulacion = Int32.Parse(this.cboTitulacion.SelectedValue.ToString());
            RecargaGrid(filtro);
        }

        /// <summary>
        /// Método que recarga el grid por completo 
        /// </summary>
        private void RecargaGrid(AsignaturaDTO filtro)
        {
            try
            {
                AsignaturaView vista = AsignaturaView.GetInstance();
                AsignaturaDTO dto;
                if (filtro == null)
                {
                    dto = new AsignaturaDTO();
                }
                else
                {
                    dto = filtro;
                }
                this.grdAsignaturas.DataSource = null;
                this.grdAsignaturas.DataSource = vista.GetAsignaturasViewByAsignatura(dto);
                this.grdAsignaturas.Refresh();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
        }

        #endregion


    }
}
